package com.xydtech.ecard.ecard.service.impl;

import com.xydtech.common.core.text.Convert;
import com.xydtech.common.utils.AESEncryptionUtils;
import com.xydtech.common.utils.DateUtils;
import com.xydtech.common.utils.StringUtils;
import com.xydtech.ecard.ecard.domain.EcardPriorCreditRecord;
import com.xydtech.ecard.ecard.domain.EcardPriorCreditTransferRecord;
import com.xydtech.ecard.ecard.mapper.EcardPriorCreditRecordMapper;
import com.xydtech.ecard.ecard.mapper.EcardPriorCreditTransferRecordMapper;
import com.xydtech.ecard.ecard.service.IEcardPriorCreditRecordService;
import com.xydtech.system.service.ISysConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 电子名片预授信记录Service业务层处理
 *
 * @author xydtech
 * @date 2024-05-16
 */
@Service
public class EcardPriorCreditRecordServiceImpl implements IEcardPriorCreditRecordService {
    @Autowired
    private EcardPriorCreditRecordMapper ecardPriorCreditRecordMapper;
    @Autowired
    private EcardPriorCreditTransferRecordMapper ecardPriorCreditTransferRecordMapper;
    @Autowired
    private ISysConfigService configService;

    /**
     * 查询电子名片预授信记录
     *
     * @param id 电子名片预授信记录主键
     * @return 电子名片预授信记录
     */
    @Override
    public EcardPriorCreditRecord selectEcardPriorCreditRecordById(Long id, String salt) {
        return ecardPriorCreditRecordMapper.selectEcardPriorCreditRecordById(id);
    }

    /**
     * 查询电子名片预授信记录列表
     *
     * @param ecardPriorCreditRecord 电子名片预授信记录
     * @return 电子名片预授信记录
     */
    @Override
    public List<EcardPriorCreditRecord> selectEcardPriorCreditRecordList(EcardPriorCreditRecord ecardPriorCreditRecord, String salt) {
        try {
            //数据加密（手机号、身份证号）
            if (!StringUtils.objIsNullOrEmpty(ecardPriorCreditRecord.getPhone())) {
                ecardPriorCreditRecord.setPhone(AESEncryptionUtils.encrypt(ecardPriorCreditRecord.getPhone(), salt));
            }
            if (!StringUtils.objIsNullOrEmpty(ecardPriorCreditRecord.getCardNum())) {
                ecardPriorCreditRecord.setCardNum(AESEncryptionUtils.encrypt(ecardPriorCreditRecord.getCardNum(), salt));
            }
            List<EcardPriorCreditRecord> priorCreditRecordList = ecardPriorCreditRecordMapper.selectEcardPriorCreditRecordList(ecardPriorCreditRecord);
            if (priorCreditRecordList.size() > 0) {
                for (EcardPriorCreditRecord priorCreditRecord : priorCreditRecordList) {
                    //数据解密（手机号、身份证号）
                    if (!StringUtils.objIsNullOrEmpty(priorCreditRecord.getPhone())) {
                        priorCreditRecord.setPhone(AESEncryptionUtils.decrypt(priorCreditRecord.getPhone(), salt));
                    }
                    if (!StringUtils.objIsNullOrEmpty(priorCreditRecord.getCardNum())) {
                        priorCreditRecord.setCardNum(AESEncryptionUtils.decrypt(priorCreditRecord.getCardNum(), salt));
                    }
                }
            }
            return priorCreditRecordList;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 新增电子名片预授信记录
     *
     * @param ecardPriorCreditRecord 电子名片预授信记录
     * @return 结果
     */
    @Override
    public int insertEcardPriorCreditRecord(EcardPriorCreditRecord ecardPriorCreditRecord, String salt) {
        //根据关联ID作废授信卡
        ecardPriorCreditRecordMapper.disusePreCreditStsByAssId(ecardPriorCreditRecord.getAssociationId());
        ecardPriorCreditRecord.setCreateTime(DateUtils.getNowDate());
        ecardPriorCreditRecord.setSts("1");
        try {
            //数据加密（手机号、身份证号）
            if (!StringUtils.objIsNullOrEmpty(ecardPriorCreditRecord.getPhone())) {
                ecardPriorCreditRecord.setPhone(AESEncryptionUtils.encrypt(ecardPriorCreditRecord.getPhone(), salt));
            }
            if (!StringUtils.objIsNullOrEmpty(ecardPriorCreditRecord.getCardNum())) {
                ecardPriorCreditRecord.setCardNum(AESEncryptionUtils.encrypt(ecardPriorCreditRecord.getCardNum(), salt));
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return ecardPriorCreditRecordMapper.insertEcardPriorCreditRecord(ecardPriorCreditRecord);
    }

    /**
     * 修改电子名片预授信记录
     *
     * @param ecardPriorCreditRecord 电子名片预授信记录
     * @return 结果
     */
    @Override
    public int updateEcardPriorCreditRecord(EcardPriorCreditRecord ecardPriorCreditRecord, String salt) {
        try {
            //数据加密（手机号、身份证号）
            if (!StringUtils.objIsNullOrEmpty(ecardPriorCreditRecord.getPhone())) {
                ecardPriorCreditRecord.setPhone(AESEncryptionUtils.encrypt(ecardPriorCreditRecord.getPhone(), salt));
            }
            if (!StringUtils.objIsNullOrEmpty(ecardPriorCreditRecord.getCardNum())) {
                ecardPriorCreditRecord.setCardNum(AESEncryptionUtils.encrypt(ecardPriorCreditRecord.getCardNum(), salt));
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return ecardPriorCreditRecordMapper.updateEcardPriorCreditRecord(ecardPriorCreditRecord);
    }

    /**
     * 批量删除电子名片预授信记录
     *
     * @param ids 需要删除的电子名片预授信记录主键
     * @return 结果
     */
    @Override
    public int deleteEcardPriorCreditRecordByIds(String ids) {
        return ecardPriorCreditRecordMapper.deleteEcardPriorCreditRecordByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除电子名片预授信记录信息
     *
     * @param id 电子名片预授信记录主键
     * @return 结果
     */
    @Override
    public int deleteEcardPriorCreditRecordById(Long id) {
        return ecardPriorCreditRecordMapper.deleteEcardPriorCreditRecordById(id);
    }

    /**
     * 作废预授信信息
     *
     * @param id 电子名片预授信记录主键
     * @return 结果
     */
    @Override
    public int disusePreCreditSts(Long id) {
        return ecardPriorCreditRecordMapper.disusePreCreditSts(id);
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public int addTransferPriorCredit(EcardPriorCreditTransferRecord priorCreditTransferRecord) {
        //保存转交记录
        priorCreditTransferRecord.setCreationTime(DateUtils.getNowDate());
        ecardPriorCreditTransferRecordMapper.insertEcardPriorCreditTransferRecord(priorCreditTransferRecord);
        return ecardPriorCreditRecordMapper.updatePriorCreditRecordUserId(priorCreditTransferRecord.getPriorCreditId(), priorCreditTransferRecord.getRecipientId(), priorCreditTransferRecord.getRecipientDeptId());
    }

}
